[組織ポリシー]リソース サービスの使用を制限するポリシーを試してみた

[組織ポリシー]リソース サービスの使用を制限するポリシーを試してみた

Google Cloudで特定サービスの使用を制限する組織ポリシーについて調査しました。本ポリシーは使用可能サービスの管理をするのに大きな効果を発揮しますが一方で適用前に十分な検証が求められます。
Clock Icon2024.08.06

概要

今回取り上げる組織ポリシーはリソースサービスの使用を制限するポリシーとなります。このポリシーを用いると、Google Cloud上でComputeやCloud Functionsなどの数あるサービスを使用することを制限することができます。

組織ポリシー名 内容 制約
リソース サービスの使用を制限する この制約は、組織、フォルダ、プロジェクト内で使用できる一連の Google Cloud リソース サービス(compute.googleapis.com や storage.googleapis.com など)を定義します。デフォルトでは、すべての Google Cloud リソース サービスが許可されています。詳しくは、https://cloud.google.com/resource-manager/help/organization-policy/restricting-resources をご覧ください。 constraints/gcp.restrictServiceUsage

本記事では設定方法や設定上の注意点などを取り上げています。

設定方法

本ポリシーの設定可能なポリシーの値としては以下となります。

ポリシーの値 説明
すべて許可 デフォルト。全てのサービスが利用可能
すべて許可しない 全てのサービスが利用不可
カスタム 許可リスト、拒否リストの2通りで設定が可能

組織作成時の状態はすべて許可となっています。すべて許可しないを設定すると全てのサービスが利用できないので限られたワークロードしか用途はないと考えます。
そしてカスタムに関して以下2通りの設定方法がありますがこれが本ポリシーの肝となる部分と考えます。

  1. 許可リスト方式
  2. 拒否リスト方式
方式 説明
許可リスト方式 許可したサービスのみ使用可能。 許可されていないサービスは拒否
拒否リスト方式 拒否したサービスのみ使用禁止。拒否されていないサービスは許可

https://cloud.google.com/resource-manager/docs/organization-policy/restricting-resources?hl=ja

またリファレンスに以下記載のある通り、IAMなど一部のサービスは制限不可となっています。

Identity and Access Management(IAM)、Cloud Logging、Cloud Monitoring などの Google Cloud プロダクトに不可欠な依存関係である特定のサービスを除外し、これらは機能しません

どのサービスが対象かどうかは以下のリンク先で検索できます。
https://cloud.google.com/resource-manager/docs/organization-policy/restricting-resources-supported-services?hl=ja

サービス名で検索してNo matchesと表示された場合は本ポリシーの制限対象外サービスです。
スクリーンショット 2024-08-06 19.43.15

本記事では許可リスト、拒否リストの2つに関して実際に設定して動作を確認してみます。
本ポリシーを適用する際は十分に検証・検討をしてください。サービスが使用不能になることで想定外のリスクが発生する可能性があります!

許可リストを設定してみる

BigQueryのみ許可する許可リストを設定してみます。

IAMと管理から組織ポリシーを押下し、画面中程のあたりのフィルタ欄にrestrictserviceusageと入力してフィルタします。Restrict Resource Service Usage が表示されるのでクリックします。
スクリーンショット 2024-08-06 18.52.47

ポリシーを管理を押下して、本ポリシーの編集画面に遷移します。
スクリーンショット 2024-08-06 18.56.29

以下の設定をします。
(親のポリシーをオーバーライドしているのは、プロジェクト単位で組織ポリシーを設定したかったからです)

設定項目 設定値
ポリシーのソース 親のポリシーをオーバーライドする
ポリシーの適用 置き換える
ポリシーの値 カスタム
ポリシーの種類 許可
サービス名 bigquery.googleapis.com

上記の設定と、カスタム値の入力欄にサービス名を入力します。サービス名に関してはAPI とサービスから該当のAPIを検索すると確認することができます。例えばBigQueryなら以下です。
スクリーンショット 2024-08-06 19.09.50

サービス名がわかったらカスタム値の入力欄に記載します。
スクリーンショット 2024-08-06 19.10.57

これで準備完了です。ポリシーの設定を押下すると、以下のダイアログが出るので設定を押下します。(入念な検討の上実施ください!)

スクリーンショット 2024-08-06 19.12.46

それでは確認してみます。まずはBigQueryにアクセスできるかみてみます。
スクリーンショット 2024-08-06 19.16.43

画面上部のサービス名検索からやってきましたが問題なくサービスを開くことができました。
続いて、許可していないサービスとしてCloud Storageにアクセスしてみます。
スクリーンショット 2024-08-06 19.19.24

このページへのアクセスはリソース使用量の制限に関するポリシーによってブロックされています。

上記のメッセージが表示されCloud Storageのサービスメニューは表示されませんでした。
見事に許可リストとして動作しています!

拒否リストも試してみる

先ほどとほとんど同じ設定値ですが、ポリシーの種類拒否に設定します。

設定項目 設定値
ポリシーのソース 親のポリシーをオーバーライドする
ポリシーの適用 置き換える
ポリシーの値 カスタム
ポリシーの種類 拒否
サービス名 bigquery.googleapis.com

期待値としてはBigQueryのみ利用不可でそれ以外のサービスは利用可能となります!
上記の設定と、カスタム値の入力欄にサービス名を入力します。サービス名に関してはAPI とサービスから該当のAPIを検索すると確認することができます。例えばBigQueryなら以下です。
スクリーンショット 2024-08-06 19.24.36

上記が設定後の画面となります。
それではまずCloud Storageにアクセスしてみます!
スクリーンショット 2024-08-06 19.27.34

利用可能でした!続いてBigQueryです!
スクリーンショット 2024-08-06 19.29.49

このページへのアクセスはリソース使用量の制限に関するポリシーによってブロックされています。

上記のメッセージが表示されBigQueryは使用することができませんでした。見事・・・

結局どういう使い分けがいいのか

個人的には以下のユースケースが考えられると思います。

方式 説明 ユースケース
許可リスト方式 許可したサービスのみ使用可能。 許可されていないサービスは拒否 使用するサービスがわかっている場合
拒否リスト方式 拒否したサービスのみ使用禁止。拒否されていないサービスは許可 使って欲しくないサービスがわかっている場合。使用するサービスが多い場合(列挙して許可するのが大変な場合)

注意点として、リファレンスにも以下にあるとおりサービスを拒否・許可する場合依存関係も重要です。

このポリシーでサービスが制限される場合、制限付きサービスとの直接的な依存関係がある一部の Google Cloud サービスも制限されます。これは、同じ顧客リソースを管理するサービスにのみ適用されます。たとえば、Google Kubernetes Engine(GKE)には Compute Engine との依存関係があります。Compute Engine が制限されていると、GKE も制限されます。

Computeを禁止したら依存関係のあるGKEも禁止される、という具合です。本ポリシーは影響も大きいため適用する際には事前に十分な検証、検討をしてください。

まとめ

まずは3行まとめです。

  • 許可リスト、拒否リストの2方式がある
  • どちらの方式が向いているかはワークロードによりけり
  • 依存関係のあるサービスを禁止する場合は注意が必要

本ポリシーを用いることで、ユーザに使用して欲しくないサービスを明確に禁止できるので運用上とてもメリットはあると考えます。一方で、運用中のサービスがある場合に適用すると障害につながりかねないので十分な検証が必要と考えます。
本記事が、組織ポリシーの情報を欲している方のお役に立てば幸いです。それではまた。ナマステー

参考

https://cloud.google.com/resource-manager/docs/organization-policy/restricting-resources?hl=ja

この記事をシェアする

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.